/**************************************************************************
 * @name: main.h
 * @brief: 主函数头文件
 * @date:
 * @author: boluzs@163.com
 * @note: None
 * @version: 1.0.0
 * @Copyright (c) 2025 by boluzs@163.com, All Rights Reserved.
 **************************************************************************/
// 定义以防止递归包含
#ifndef _MAIN_H
#define _MAIN_H 1

// (1)、其它头文件
#include <stdio.h> //标准头文件
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <linux/input.h> //输入头文件
#include <sys/mman.h>    //内存映射头文件
#include <dirent.h>      //目录IO头文件
#include <fcntl.h>       //系统IO头文件
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pthread.h> //多线程头文件
#include <stdbool.h>
#include <linux/videodev2.h> //V4L2架构有关的头文件
#include <time.h>            // 时间头文件

#include "font.h"

// (2)、宏定义(函数、变量、常量)
// LCD屏
#define LCD_DEV "/dev/fb0"
// LCD屏尺寸
#define LCD_WIDTH 800
#define LCD_HEIGHT 480
#define LCD_SIZE 800 * 480 * 4
// 触摸屏路径
#define TS_DEV "/dev/input/event0"
// 开机动画路径
#define DIR_PATH "/tmp/starge_project/Data/start/"
#define CHARGE_DIR_PATH "/tmp/starge_project/Data/charge/"
#define FAST_CHARGE_PRICE 0.6
#define SLOW_CHARGE_PRICE 1.2
#define BATTERY_KWH 150
#define FAST_CHARGE_V 750
#define FAST_CHARGE_A 480
#define SLOW_CHARGE_V 380
#define SLOW_CHARGE_A 64

#define FAST_CHARGE_VS "750V"
#define FAST_CHARGE_AS "480A"
#define FAST_CHARGE_VUS "750"
#define FAST_CHARGE_AUS "480"
#define FAST_CHARGE_KW "360KW"
#define SLOW_CHARGE_VS "380V"
#define SLOW_CHARGE_AS "64A"
#define SLOW_CHARGE_VUS "380"
#define SLOW_CHARGE_AUS "64"
#define SLOW_CHARGE_KW "24.32KW"
// 充电功率计算
#define CHARGE_POWER_KW(V, A) ((V) * (A) / 1000.0) // kW
#define SECONDS_PER_HOUR 3600.0
// (3)、自定义类型(结构体、联合体、枚举、函数指针类型.....)

// (4)、函数声明
extern int Show_Font(unsigned int fontSize, u32 width, u32 height,
                     u32 byteperpixel, color buf_c, s32 x, s32 y,
                     char *text, color font_c, s32 maxWidth, int px, int py);
extern bool Show_Info_Popup(const char *message, const char *buttonText);
extern int Show_Choose_Popup(const char *message, const char *buttonText1, const char *buttonText2);
extern bool Show_Img_Popup(const char *img_path, const char *buttonText);
// (5)、全局变量声明
typedef struct TouchData
{
    unsigned int ts_x;
    unsigned int ts_y;
    unsigned int page;
    int ts_fd;
} Td_t, *Td_p;

typedef struct User
{
    char Account[12];    // 联系方式
    char Passwd[7];      // 密码
    double Balance;      // 用户余额
    char CreateTime[32]; // 创建时间
} User_t, *User_p;

typedef struct User_Credit
{
    char Account[12];    // 联系方式
    double Money;        // 消费的金额
    char CreateTime[32]; // 创建时间
    double Balance;      // 用户余额
} UserC_t, *UserC_p;

extern unsigned int *lcd_buf;  // lcd屏的缓冲区
extern unsigned int *lcd_mp;   // lcd屏的内存映射
extern Td_t touch_data;        // 触摸屏数据
extern pthread_t touch_thread; // 触摸屏的子线程
extern pthread_t time_thread;  // 当前时间的子线程
extern font *pft;              // 字体指针
extern User_p login_user;      // 登录后的用户
extern char *cur_datetime;     // 当前日期时间
// (6)、全局静态变量(定义)

// (7)、全局静态函数(实现)

#endif
